package com.rong.structural.decoratorModel;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

public class Client {
    public static void main(String[] args) throws Exception{
        // 装饰者模式下的订单：2份巧克力 + 一份牛奶的Long Black咖啡
        Drink longBlack = new LongBlack();
        System.out.println("费用1：" + longBlack.cost());
        System.out.println("描述1：" + longBlack.getDes());
        // 加入一份牛奶
        longBlack = new Milk(longBlack);
        System.out.println("费用2：" + longBlack.cost());
        System.out.println("描述2：" + longBlack.getDes());
        // 加入两份巧克力
        longBlack = new Chocolate(longBlack);
        longBlack = new Chocolate(longBlack);
        System.out.println("费用3：" + longBlack.cost());
        System.out.println("描述3：" + longBlack.getDes());


        // 说明：JDK中的IO就是装饰者模式
        // 1.InputStream是抽象类 类似Drink
        // 2.FileInputStream是InputStream的子类 类似LongBlack
        // 3.FilterInputStream是InputStream的子类 类似Decoratoe修饰者
        // 4.DataInputStream是FilterInputStream的子类 类似Milk和Chocolate 具体的修饰者
        // 5.FilterInputStream类有Protected volatile InputStream in;即含被装饰者
        // 6.分析得出 IO体系中使用的是装饰者模式
        InputStream dis = new DataInputStream(new FileInputStream("D:\\a.txt"));
        System.out.println(dis.read());
        dis.close();

    }
}
